Committing changes basically works as follows:
There's no hidden state, so you can abort the process or pick it up again at any time.
The set of files actually committed is really decided only
during the very last step, which is a mixed blessing. It allows
you to go back and change your mind about which files to commit,
but it also means that you might inadvertently change the set of
selected files. To reduce the risk of error, C-c C-c
will ask for confirmation if the set of selected files has
changed between the first step and the last. You can change this
last detail with log-edit-confirm.
As for the difference between c (i.e.
cvs-mode-commit) and C (i.e.
cvs-mode-commit-setup) is that the first gets you
straight to ‘*cvs-commit*’ without erasing it or
changing anything to its content, while the second first erases
‘*cvs-commit*’
and tries to initialize it with a sane default (it does that by
either using a template provided by the CVS administrator or by
extracting a relevant log message from a ChangeLog file).
If you are editing the files in your Emacs, an automatic ‘revert-buffer’ will be performed. (If the file contains ‘$Id$’ keywords, ‘cvs commit’ will write a new file with the new values substituted. The auto-revert makes sure that you get them into your buffer.) The revert will not occur if you have modified your buffer, or if ‘cvs-auto-revert’ is set to ‘nil’.